home *** CD-ROM | disk | FTP | other *** search
-
- unit xdos;
-
- Interface
- function GetVolSerialNo(DriveNo:Byte): string;
- Procedure PutVolSerialNo(DriveNo:Byte;SerialNo:longint);
-
- Implementation
- uses dos,crt;
-
- type
- SerNo_type =
- record
- case integer of
- 0: (SerNo1, SerNo2 : word);
- 1: (SerNo : longint);
- end;
-
- DiskSerNoInfo_type = record
- Infolevel : word;
- VolSerNo : SerNo_Type;
- VolLabel : array[1..11] of char;
- FileSys : array[1..8] of char;
- end;
-
-
- function HexDigit(N : Byte) : char;
- begin
- if n < 10 then HexDigit := Chr(Ord('0')+n)
- else HexDigit := Chr(Ord('A') + (n - 10));
- end;
-
-
- function GetVolSerialNo(DriveNo:Byte): string;
- var
- ReturnArray : DiskSerNoInfo_type;
- Regs : Registers;
- begin
- with regs do begin
- AX := $440d;
- BL := DriveNo;
- CH := $08;
- CL := $66;
- DS := Seg(ReturnArray);
- DX := Ofs(ReturnArray);
- Intr($21,Regs);
- if (Flags and FCarry)<>0 then GetVolSerialNo := '' else
- with ReturnArray.VolSerNo do
- GetVolSerialNo :=HexDigit(Hi(SerNo2) Div 16) + HexDigit(Hi(SerNo2) Mod 16)
- +
- HexDigit(Lo(SerNo2) Div 16) + HexDigit(Lo(SerNo2) Mod 16)
- +
- HexDigit(Hi(SerNo1) Div 16) + HexDigit(Hi(SerNo1) Mod 16)
- +
- HexDigit(Lo(SerNo1) Div 16) + HexDigit(Lo(SerNo1) Mod 16);
- end;
- end;
-
- Procedure PutVolSerialNo(DriveNo:Byte;SerialNo:longint);
- var
- ReturnArray : DiskSerNoInfo_type;
- Regs : Registers;
- begin
- with regs do begin
- AX := $440d;
- BL := DriveNo;
- CH := $08;
- CL := $66;
- DS := Seg(ReturnArray);
- DX := Ofs(ReturnArray);
- Intr($21,Regs);
- if (Flags and FCarry)=0 then begin
- ReturnArray.VolSerNo.SerNo := SerialNo;
- AH := $69;
- BL := DriveNo;
- AL := $01;
- DS := Seg(ReturnArray);
- DX := Ofs(ReturnArray);
- Intr($21,Regs);
- end;
- end;
- end;
-
- end.